Instagram API

Descripcion

Como utilizar la API de instagram para obtener el feed de una cuenta.

Documentación Oficial

Metodo

Creación cuenta de desarrollador

Primero tenemos que crear una cuenta de desarrollador de Facebook:

Facebook developer

Una vez tenemos la cuenta nos logueamos y entramos en Get started:

Ahora tenemos que configurar la cuenta de desarrollador, vamos siguiendo los pasos que se nos indican:

Indicamos un movil para verificar la cuenta:

Verificamos el correo:

Indicamos que somos "Developers":

Crear App

A continuación creamos una app desde el menu principal:

Menu principal

Indicamos Other en la primera pantalla:

Seleccionamos None en tipo de App:

Le damos un nombre a la aplicación y hacemos click en Create App:

A continuación nos aparecerá un dashboard con distintas opciones

Primero tenemos que configurar la App para añadir la plataforma web

Hacemos click en App settings > Basic y despues en Add platform:

Indicamos plataforma web:

Nos aparece un input para introducir la URL de nuestra web,pero para hacer la prueba en este caso solo tenemos que poner http://localhost/

Y hacemos click en Save changes

Ahora nos vamos al Dashboard y hacemos click en Set up en la opción de Instagram Basic Display

Esto nos añadirá un nuevo producto en el menu de la izquierda, nos vamos a Instagram Basic Display > Basic Display:

Hacemos click abajo en Create New App:

Se nos pide un nombre, lo dejamos por defecto y hacemos click en Create New App:

Una vez creada la App para Instagram Basic Display, tenemos que indicar las URLs (de redireccion, de desautorización y de borrado de datos), en este caso para hacer la prueba dejaremos todas como https://localhost (las direcciones tienen que ser https).

La URL mas importante es Valid OAuth Redirect URIs, está será la URL a donde se nos redigirá despues de hacer login, está URL tendrá que ser una página donde nosotros vayamos a manejar el código de respuesta que se nos da para poder obtener el access token.

Para hacer la prueba y al estar en modo desarrollo, tenemos que añadir usuarios de testing, para ello nos vamos a App Roles > Roles y hacemos click en Add Instagram Testers:

Indicamos un usuario de Instagram en la ventana que nos aparece:

NOTA: el usuario que utilicemos de instagram tiene que tener contenido subido para poder realizar las pruebas de obtener sus posts

Al añadir un usuario quedará con el estado pending:

Necesitamos hacer login en instagram con el usuario que hemos añadido y aceptar la invitación:

Dentro del perfil hacemos click en More > Settings:

Aqui hacemos click en Apps and websites > Tester invites y aceptamos la invitación:

Solicitudes a la API

Una vez tenemos hechas todas las configuraciones ya podemos empezar el flujo para hacer consultas a la API, el flujo es el siguiente:

Obtener Access Token

Para obtener el access token tenemos que entrar en la siguiente URL:

https://api.instagram.com/oauth/authorize?client_id={app-id}&redirect_uri={redirect-uri}&scope=user_profile,user_media&response_type=code

Tenemos que cambiar los campos {app-id} que es el id de nuestra aplicación de instagram

NOTA: No es lo mismo el id de aplicación de instagram que el id de la aplicación general

Y el campo {redirect-uri} que es una de las URLs que hemos configurado en el campo Valid OAuth Redirect URIs en nuestro caso https://localhost/

En nuestro caso la URL queda así:

https://api.instagram.com/oauth/authorize?client_id=265105329776698&redirect_uri=https://localhost/&scope=user_profile,user_media&response_type=code

Al acceder a la URL se nos presenta una pantalla de login de instagram (si ya estamos logueados con una cuenta de instagram en nuestro navegador no aparecerá esta pantalla):

Una vez nos logueamos nos preguntará si queremos dar acceso a la App a nuestro perfil, le damos a allow:

Al darle a allow se nos redigirá a la URL que hemos indicado en el enlace, añadiendo el código de authenticación como parámetro en la URL

En nuestro caso la redireccion es a localhost, y al no tener ningun servidor escuchando peticiones simplemente la redirección da error, pero aún así podemos ver el código de authorización en la URL para poder utilizarlo:

NOTA: el código al final tiene una pequeño fragment #_ que no es parte del código en si.

En un entorno real la URL a la que redirigimos se encargaría de coger el código que se le pasa por parámetro para utilizarlo en las siguientes solicitudes.

Una vez tenemos el código obtenemos el access token de la siguiente manera usando curl:

curl -X POST \
  https://api.instagram.com/oauth/access_token \
  -F client_id={app-id} \
  -F client_secret={app-secret} \
  -F grant_type=authorization_code \
  -F redirect_uri={redirect-uri} \
  -F code={code}

Cambiamos los valores {app-id} {app-secret} {redirect-uri} {code} el valor de {app-secret} lo obtenemos en la misma página que el {app-id}:

La respuesta que nos da incluye el access_token y el user_id que necesitaremos para consultar el feed (el user_id solo se usa en algunas peticiones):

Obtener Feed de la cuenta

Ahora ya tenemos toda la información para consultar el feed de la cuenta, lo hacemos con la siguiente peticion:

curl -X GET 'https://graph.instagram.com/me/media?fields=caption,media_type,media_url&access_token={access-token}'

Cambiamos {access-token} por el access token que hemos obtenido en el paso anterior

El parámetro fields podemos indicarle los parámetro que queremos que nos devuelva, están documentados en la Documentación de la API

La respuesta que nos da una vez formateada es la siguiente:

En el campo data podemos ver que es un array y que tiene dos elementos que corresponden a los dos posts que hay en la cuenta, e incluye el texto de uno de los posts (el otro no tiene ningun texto asociado) y los links a las imagenes del post, la vista de la cuenta desde el navegador es la siguiente:

Obtener token de larga duración

El access token que obtenemos con el metodo anterior dura solo 1 hora, si queremos obtener otro token tendremos que volver a iniciar sesión con el usuario.

Para evitar esto podemos intercambiar el token de corta duración por uno de larga duración (dura 60 días por defecto) ademas este token de larga duración permite ser refrescado.

Para obtener el token de larga duración lo hacemos con la siguiente peticion:

curl -X GET "https://graph.instagram.com/access_token?grant_type=ig_exchange_token&client_secret={app-secret}&access_token={access_token}"

Cambiamos {app-secret} y {access_token} por los valores correspondientes, y esto nos devolverá un nuevo token que se usa igual que el token que estabamos usando hasta ahora, solo que tiene una duración mayor

Refresh token

El token de larga duración dura 60 días y a mayores podemos refrescarlo para que siga durando mas haya de esos 60 días, lo hacemos con la siguiente petición:

curl -X GET "https://graph.instagram.com/refresh_access_token?grant_type=ig_refresh_token&access_token={long-lived-access-token}"

Cambiamos {long-lived-access-token} por nuestro token de larga duración y la respuesta será un nuevo token que caducará a los 60 días desde el momento en el que hemos hecho la petición.

Tags

Instagram | API